package jnpf.database.datatype.db;

import jnpf.database.datatype.db.interfaces.DtInterface;
import jnpf.database.datatype.limit.*;
import jnpf.database.datatype.limit.base.DtLimitBase;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 类功能
 *
 * @author JNPF开发平台组
 * @version V3.2.0
 * @copyright 引迈信息技术有限公司
 * @date 2021/10/25
 */
@Getter
@AllArgsConstructor
public enum DtDMEnum implements DtInterface {
    /*============================ 整型 ===========================*/
    TINY_INT    ("TINYINT",     new IntegerLimit    () ),
    SMALL_INT   ("SMALLINT",    new IntegerLimit    () ),
    /**
     * 默认长度：10
     */
    INT         ("INT",         new IntegerLimit    () ),
    /**
     * 默认长度：19
     */
    BIGINT      ("BIGINT",      new IntegerLimit    () ),
    /*============================ 文本字符串类型 ===========================*/
    CHAR        ("CHAR",        new StringLimit     (true, 10L, 32767L)),
    /**
     * 存放固定长度的字符数据，最长2000个字符。
     * 是标准sql提供的数据类型。
     */
    VARCHAR     ("VARCHAR",     new StringLimit     (true, 10L, 32767L)),
    /**
     * 存放可变长字符数据，最大长度为4000字符。，最大長度為4000字符。
     * 是oracle提供的独特的数据类型。
     */
    VARCHAR2    ("VARCHAR2",    new StringLimit     (true, 10L, 32767L)),
    /**
     * 默认长度：2147483647
     */
    TEXT        ("TEXT",        new StringLimit     (2147483647L)),
    /**
     * 默认长度：2147483647
     */
    CLOB        ("CLOB",        new StringLimit     (2147483647L)),

    /*============================ 时间格式 ===========================*/
    DATE        ("DATE",        new DateTimeLimit()),
    /**
     * 默认长度：36，默认精度：6
     * Mysql datetime转达梦 TIMESTAMP,手动改成DATETIME数据会报错
     * 利用 PostGreSQL进行迁移
     */
    DATE_TIME   ("DATETIME",    new DateTimeLimit()),
    /**
     * 默认长度：36，默认精度：6
     * 默认工具mysql（Timestamp）--> Dm（DateTime）
     */
    TIME_STAMP  ("TIMESTAMP",   new DateTimeLimit()),
    /**
     * 默认长度：22，默认精度：6
     */
    TIME        ("TIME",        new DateTimeLimit()),
    /**
     * 默认长度：13
     */
    /*============================ 定点型 ===========================*/
    DECIMAL     ("DECIMAL",     new DecimalLimit    (true, 22, 38, 6 , 38)),
    DEC         ("DEC",         new DecimalLimit    (true, 22, 38, 6 , 38)),
    /*============================浮点===========================*/
    /**
     * 显示real
     */
    FLOAT       ("FLOAT",       new FloatLimit(24)),
    DOUBLE      ("DOUBLE",      new FloatLimit(53)),

    ;

    /**
     * 数据库字段类型
     */
    private final String dataType;

    /**
     * 长度、精度、标度规则模型
     */
    private final DtLimitBase dtLimit;

}
